17.5 Die Klasse »ColorDialog«
 
Noch einfacher als OpenFileDialog und SaveFileDialog ist das Dialogfenster zu programmieren, das dem Anwender ermöglicht, interaktiv Farben auszuwählen, beispielsweise um der Eigenschaft BackColor oder ForeColor zur Laufzeit eine neue Farbe zuzuweisen.
Zum Öffnen des Dialogs wird ebenfalls die Methode ShowDialog aufgerufen. Danach sieht das Standarddialogfeld zur Farbauswahl wie folgt aus:
 Hier klicken, um das Bild zu vergrößern
Abbildung 17.8 Das Standarddialogfeld »ColorDialog«
Ein Klick auf die Schaltfläche Farben definieren erweitert das Fenster und ermöglicht es dem Anwender, über die vordefinierten Farben hinaus ganz nach eigener Vorstellung Farbwerte festzulegen (siehe Abbildung 17.9). Beabsichtigen Sie, dem Anwender von Anfang an das erweiterte Dialogfenster anzubieten, müssen Sie vor dem Öffnen des Dialogs die Eigenschaft FullOpen=true setzen.
Es bleibt noch die Frage zu klären, welche Eigenschaft des ColorDialog-Objekts ausgewertet werden muss, um zum Beispiel die Hintergrundfarbe des Formulars zu ändern: Es handelt sich um Color.
Im folgenden Codefragment wird die Hintergrundfarbe der Form gemäß der Auswahl im Dialog verändert. Dem Benutzer wird der erweiterte Dialog angezeigt. Wir werten allerdings nur die OK-Schaltfläche des Dialogs aus, da die Abbrechen-Schaltfläche bedeutungslos ist:
| private void btnSetColor_Click(object sender, EventArgs e) {
|
| colorDialog1.FullOpen = true;
|
| if(colorDialog1.ShowDialog() == DialogResult.OK)
|
| this.BackColor = colorDialog1.Color;
|
| }
|
Im Zustand FullOpen hat der Anwender die Möglichkeit, 16 benutzerdefinierte Farben festzulegen, die beim erneuten Öffnen des Dialogs weiterhin zur Auswahl bereitstehen. Allerdings wird der Dialog, den wir mit unserem Codefragment oben öffnen, dieses Verhalten nicht zeigen, denn die Wiedergabe bereits festgelegter benutzerdefinierter Farben ist kein Standardverhalten, sondern benötigt zusätzlichen Programmcode. Verantwortlich für das Speichern benutzerdefinierter Farben ist die Eigenschaft CustomColors:
| public int[] CustomColors {get; set;}
|
 Hier klicken, um das Bild zu vergrößern
Abbildung 17.9 Das erweiterte Standarddialogfeld »ColorDialog«
Damit die vom Anwender ausgewählten Farben zur Laufzeit zur Verfügung stehen, müssen wir zuerst ein int-Array mit ausreichender Kapazität deklarieren:
| int[] myColors = new int[16];
|
Bevor mit ShowDialog das Dialogfenster geöffnet wird, weisen wir den Inhalt dieses Arrays der Eigenschaft CustomColors zu:
| colorDialog1.CustomColors = myColors;
|
Nach dem Schließen des Dialogs werden die Farben im Array gespeichert und stehen bei einem späteren erneuten Öffnen des Dialogs zur Verfügung:
| myColors = colorDialog1.CustomColors;
|
Fassen wir zum Abschluss den Code in einem Click-Ereignishandler zusammen:
| public partial class Form1 : Form {
|
| private int[] myColors = new int[16];
|
| ...
|
| private void btnSetColor_Click(object sender, EventArgs e) {
|
| fontDialog1.FullOpen = true;
|
| colorDialog1.CustomColors = myColors;
|
| if(colorDialog1.ShowDialog() == DialogResult.OK)
|
| this.BackColor = colorDialog1.Color;
|
| myColors = colorDialog1.CustomColors;
|
| }
|
| }
|
|